package org.example.todolist.controller;

import org.example.todolist.entity.Task;
import org.example.todolist.service.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;

/**
 * 任务控制器
 */
@RestController
public class TaskController {

    @Autowired
    private TaskService taskService;

    /**
     * 获取列表下的所有任务
     * @param listId 列表ID
     * @return 任务集合
     */
    @GetMapping("/api/lists/{listId}/tasks")
    public ResponseEntity<ArrayList<Task>> getTasksByListId(@PathVariable Integer listId) {
        ArrayList<Task> tasks = taskService.getTasksByListId(listId);
        return ResponseEntity.ok(tasks);
    }

    /**
     * 在列表下创建新任务
     * @param listId 列表ID
     * @param task 任务对象
     * @return 创建的任务对象
     */
    @PostMapping("/api/lists/{listId}/tasks")
    public ResponseEntity<Task> createTask(@PathVariable Integer listId, @RequestBody Task task) {
        task.setListId(listId);
        Task createdTask = taskService.createTask(task);
        if (createdTask != null) {
            return ResponseEntity.status(HttpStatus.CREATED).body(createdTask);
        } else {
            return ResponseEntity.badRequest().build();
        }
    }

    /**
     * 更新任务
     * @param id 任务ID
     * @param task 任务对象
     * @return 更新结果
     */
    @PutMapping("/api/tasks/{id}")
    public ResponseEntity<Void> updateTask(@PathVariable Integer id, @RequestBody Task task) {
        task.setId(id);
        boolean result = taskService.updateTask(task);
        if (result) {
            return ResponseEntity.ok().build();
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    /**
     * 删除任务
     * @param id 任务ID
     * @return 删除结果
     */
    @DeleteMapping("/api/tasks/{id}")
    public ResponseEntity<Void> deleteTask(@PathVariable Integer id) {
        boolean result = taskService.deleteTask(id);
        if (result) {
            return ResponseEntity.ok().build();
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    /**
     * 标记任务为完成/未完成
     * @param id 任务ID
     * @param status 状态（1表示完成，0表示未完成）
     * @return 更新结果
     */
    @PatchMapping("/api/tasks/{id}/complete")
    public ResponseEntity<Void> completeTask(@PathVariable Integer id, @RequestParam Integer status) {
        boolean result = taskService.updateTaskStatus(id, status);
        if (result) {
            return ResponseEntity.ok().build();
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}
